package cn.glutnn.console;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import cn.glutnn.dao.RoomDao;
import cn.glutnn.dao.SeatDao;
import cn.glutnn.entity.Room;
import cn.glutnn.entity.Seat;
import cn.glutnn.service.RoomService;

public class RoomConsole {

	RoomService roomService = new RoomService();

	RoomDao roomDao = new RoomDao();
	SeatDao seatDao = new SeatDao();

	/**
	 * 保存影厅功能
	 */
	public void save() {
		Scanner scanner = new Scanner(System.in);
		// 1、接收输入影厅信息
		System.out.println("请输入影厅名称：");
		String name = scanner.next();
		System.out.println("请输入影厅的座位数（阿拉伯数字）：");
		Integer seatnum = scanner.nextInt();
		// 2、判断影厅是否重名
		boolean checkOK = checkNameDuplication(name);
		if (!checkOK) {
			return;
		}

		// 3、影厅信息封装到Room对象
		Room room = new Room(name, seatnum);

		// 4、根据影厅座位数，自动生成座位信息，（要求在service层实现）座位编号规则为“1-1,1-2,1-3,...,2-1,2-2”
		// 每十个座位为一行
		boolean isOK = roomService.saveRoomAndSeat(room);

		// 6、输出保存结果，是否成功
		if (isOK) {
			System.out.println("保存“" + name + "”影厅成功");
		} else {
			System.out.println("保存“" + name + "”影厅失败");
		}
	}

	private boolean checkNameDuplication(String name) {
		// 实现验证逻辑
		List<Room> list = roomDao.find(name);
		boolean canNotSave = list.size() != 0;

		if (canNotSave) {
			System.out.println("已经存在该“" + name + "”影厅，不允许保存!");
			return false;
		}

		return true;
	}
	
	public void update() {
		// 1、接收需要更新的电影名称
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入需要修改的影厅名称：");
		String name = scanner.nextLine();
		
		// 2、查找影厅
		Room room = roomDao.findOne(name);
		if (room == null) {
			System.out.println("找不到该“"+name+"”影厅，无法修改");
			return;
		}
		
		
		// 3、输入需要修改的影厅名称
		System.out.println("影厅名称更改为（不更改直接回车）：");
		String name2 = scanner.nextLine();
		if (!"".equals(name2)) {
			room.name = name2;
		}
		// 3-1、输入需要修改的影厅座位
		System.out.println("请输入影厅的座位数（阿拉伯数字，如输入0，那么不做修改）：");
		Integer seatnum = scanner.nextInt();
		
		// 4、保存影厅更新
		boolean isOK = roomDao.update(room);
		// 4-1、保存座位更新
		boolean isUpdateOK = roomService.updateRoomAndSeat(room);
		// 5、提示
		System.out.println(isOK && isUpdateOK ? "删除“"+name+"”影厅成功" : "删除“"+name+"”影厅失败");
	}

	public void delete() {
		// 1、接收需要删除影厅的名称
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入影厅名称：");
		String name = scanner.next();

		// 2、查询该影厅，拿到id
		Room room = roomDao.findOne(name);
		if (room == null) {
			System.out.println("找不到该影厅，无法删除");
			return;
		}

		// 3、调用dao,删除影厅
		boolean isOK = roomDao.delete(room.id);
		
		// 4、连带删除影厅下的座位
		List<Seat> list = seatDao.findByRoomid(room.id);
		for(Seat seat: list) {
			seatDao.delete(seat.id);
		}
		
		// 5、注意提示
		System.out.println(isOK ? "删除“"+name+"”影厅成功" : "删除“"+name+"”影厅失败");

	}

}
